package mx.ipn.escom.redes.gestionaraplicacion.dao;

import java.util.List;

import javax.inject.Named;
import javax.inject.Singleton;

import org.hibernate.Query;
import org.springframework.orm.hibernate4.support.HibernateDaoSupport;
import org.springframework.transaction.annotation.Transactional;

import mx.ipn.escom.redes.equipo.model.AplicacionSoftware;

@Singleton
@Named("aplicacionDao")
public class AplicacionDao  extends HibernateDaoSupport{

	private static final String UNICIDAD_NOMBRE = "FROM AplicacionSoftware where nombre = :name";

	public List<AplicacionSoftware> findAll(){
		return getHibernateTemplate().loadAll(AplicacionSoftware.class);
	}
	
	public AplicacionSoftware findById(Integer id) {
		return getHibernateTemplate().get(AplicacionSoftware.class, id);
	}
	
	public List<AplicacionSoftware> findByExample(AplicacionSoftware entidad){
		return getHibernateTemplate().findByExample(entidad);
	}
	
	public AplicacionSoftware save(AplicacionSoftware entidad) {
		AplicacionSoftware entidadAux = getHibernateTemplate().merge(entidad);
		getHibernateTemplate().save(entidadAux);
		return entidadAux;
	}
	
	public AplicacionSoftware update(AplicacionSoftware entidad) {
		AplicacionSoftware entidadAux = getHibernateTemplate().merge(entidad);
		getHibernateTemplate().update(entidadAux);
		return entidadAux;
	}
	
	public AplicacionSoftware delete (AplicacionSoftware entidad){
		AplicacionSoftware entidadAux = getHibernateTemplate().merge(entidad);
		getHibernateTemplate().refresh(entidadAux);
		getHibernateTemplate().delete(entidadAux);
		return entidadAux;
	}
	
	@SuppressWarnings("unchecked")
	@Transactional
	public boolean isNombreRepetido(String nombre){
		Query query = getHibernateTemplate().getSessionFactory().getCurrentSession().createQuery(UNICIDAD_NOMBRE);
		query.setString("name", nombre);
		System.out.println("Nombre =====> " + nombre);
		List<AplicacionSoftware> list = query.list();
		if(list.isEmpty()){
			System.out.println("Voy a regresar verdadero por: "+list.isEmpty());
			return true;
		}
		System.out.println("Voy a regresar falso por: "+list.isEmpty());
		return false;
	}
	
}